﻿/*
 *SWFUpload jQuery Plugin v1.0.0
 * Copyright (c) 2009 Adam Royle
 * Licensed under the MIT license.
 */

(function($) {

	var defaultHandlers = [ 'swfupload_loaded_handler', 'file_queued_handler',
			'file_queue_error_handler', 'file_dialog_start_handler',
			'file_dialog_complete_handler', 'upload_start_handler',
			'upload_progress_handler', 'upload_error_handler',
			'upload_success_handler', 'upload_complete_handler',
			'queue_complete_handler' ];
	var additionalHandlers = [];

	$.fn.swfupload = function() {
		var args = $.makeArray(arguments);
		return this.each(function() {
			var swfu;
			if (args.length == 1 && typeof (args[0]) == 'object') {
				swfu = $(this).data('__swfu');
				if (!swfu) {
					var settings = args[0];
					var $magicUploadControl = $(this);
					var handlers = [];
					$.merge(handlers, defaultHandlers);
					$.merge(handlers, additionalHandlers);
					$.each(handlers, function(i, v) {
						var eventName = v.replace(/_handler$/, '').replace(
								/_([a-z])/g, function() {
									return arguments[1].toUpperCase();
								});
						settings[v] = function() {
							var event = $.Event(eventName);
							$magicUploadControl.trigger(event, $
									.makeArray(arguments));
							return !event.isDefaultPrevented();
						};
					});
					$(this).data('__swfu', new SWFUpload(settings));
				}
			} else if (args.length > 0 && typeof (args[0]) == 'string') {
				var methodName = args.shift();
				swfu = $(this).data('__swfu');
				if (swfu && swfu[methodName]) {
					swfu[methodName].apply(swfu, args);
				}
			}
		});
	};

	$.swfupload = {
		additionalHandlers : function() {
			if (arguments.length === 0) {
				return additionalHandlers.slice();
			} else {
				$(arguments).each(function(i, v) {
					$.merge(additionalHandlers, $.makeArray(v));
				});
			}
		},
		defaultHandlers : function() {
			return defaultHandlers.slice();
		},
		getInstance : function(el) {
			return $(el).data('__swfu');
		}
	};

})(jQuery);